# 闭包
# 条件：
# 嵌套函数（函数里面在定义函数）
# 内层函数使用外层函数的局部变量
# 外层函数的返回值时内层函数的函数名
def outer():
    n = 10
    def inner():
        print(n)
    return inner
# print(outer())
# 第一种写法
outer()()
# 第二种写法
ot = outer()
ot()


def outer2(m):
    n = 10
    def inner(o):
        print("计算结果:",m+n+o)
    return inner # 返回函数名，而不是inner() 因为inner函数里面参数比较多时或者说受到限制时，写法不规范

ot = outer2(20)
ot(20)


# 函数引用
def funa():
    print(123)
print(funa) # 函数名里面保存了函数所在位置的引用
# id() 判断两个变量是否时同一个值的引用